﻿<?xml version="1.0" encoding="utf-8" ?>
<schema 
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:maml="http://ddue.schemas.microsoft.com/authoring/2003/5"
		xmlns:doc="http://ddue.schemas.microsoft.com/authoring/internal"
        targetNamespace="http://ddue.schemas.microsoft.com/authoring/2003/5" 
        blockDefault="#all" 
        elementFormDefault="qualified" 
        attributeFormDefault="unqualified"
        xml:lang="en"
    >

    <!-- Schema documentation -->
    <annotation>
        <documentation>
            This schema describes MAML, the Microsoft Assistance Markup Language.
            MAML is intended for software documentation. In particular, it is 
            intended to accomodate the needs of Microsoft documentation.
        </documentation>
        <documentation>
            The schema is broken into three main areas: end user, developer and
            IT Pro. These areas adequaltely categorize Microsoft
            documentation.
        </documentation>
        <documentation>
         The namespace uri for this version of Maml is: http://ddue.schemas.microsoft.com/authoring/2003/5.
         Each backwards-incompatible revision to Maml will require that the date fields be appropriately
         incremented in uri of the updated version of the Maml schema.
        </documentation>
    </annotation>

    <annotation>
        <documentation>
            This portion of the schema was created by alexstoc in April 2003.
        </documentation>
    </annotation>
    <import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="space.xsd"/>
    <include schemaLocation="baseConditional.xsd"/>
    <include schemaLocation="inline.xsd"/>
    <include schemaLocation="block.xsd"/>
    <include schemaLocation="structure.xsd"/>

    <!-- ***************************************************************** -->
    <complexType name="singleParagraphSimpleContentType">
        <sequence>
            <element ref="maml:para" minOccurs="0"/>
        </sequence>
    </complexType>
    
    <element name="summary" type="maml:singleParagraphSimpleContentType">
        <annotation>
            <documentation>
            This element contains a summary, introduction, or short description of the current item.
            This text typically appears in a topic and may also be used as the description of the topic
            that appears in a jump table when the topic is being linked to.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <element name="remarks" type="maml:namedSectionType">
        <annotation>
            <documentation>
            This element contains a detailed discussion of the current item.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
		    </appinfo>
        </annotation>
    </element>
    
    <element name="legacy" type="maml:namedSectionType">
        <annotation>
            <documentation>
            This element holds legacy content that has not been subdivided
            into elements according to the latest standards.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <element name="comments" type="maml:namedSectionType">
        <annotation>
            <documentation>
            This element holds a general discussion.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
	<complexType name="codeType">
		<choice>
			<element ref="maml:code"/>
			<element ref="maml:codeReference"/>
		</choice>
	</complexType>
    <group name="codeExampleContentsGroup">
        <sequence>
            <element ref="maml:description" minOccurs="0"/>
            <group   ref="maml:codeGroup" minOccurs="1" maxOccurs="unbounded"/> <!-- This is to allow a single example with equivalent code in multiple languages -->
            <element ref="maml:comments" minOccurs="0"/>
	    <element name="input" type="maml:codeType" minOccurs="0"/>
	    <element name="output" type="maml:codeType" minOccurs="0"/>
	    <element name="sampleOutput" type="maml:codeType" minOccurs="0"/>
        </sequence>
    </group>

    <complexType name="codeExampleType" mixed="false">
        <choice>
            <element ref="maml:legacy"/> <!-- TODO: review use of element to hold legacy content -->
            <group   ref="maml:codeExampleContentsGroup"/>
        </choice>
    </complexType>

    <element name="codeExample" type="maml:codeExampleType">
        <annotation>
            <documentation>
            This element holds a discussion of a code example.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="codeExamplesType" mixed="false">
        <sequence>
            <element ref="maml:codeExample" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    
    <element name="codeExamples" type="maml:codeExamplesType">
        <annotation>
            <documentation>
            This element is a collection of codeExample elements.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    <element name="buildInstructions" type="maml:namedSectionType">
        <annotation>
            <documentation>
            This element holds instructions for building a code example.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    	</element>
	<element name="robustProgramming" type="maml:namedSectionType">
        <annotation>
            <documentation>
            This element holds a discussion of error handling and other
            issues related to writing solid code.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    	</element>
    
    	<element name="security" type="maml:namedSectionType">
        <annotation>
            <documentation>
            This element holds a discussion of security issues.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    	</element>

	<complexType name ="legacySyntaxType" mixed="true">
	    <choice minOccurs="0" maxOccurs="unbounded">
	        <!--<element name="legacyItalic" type="maml:textType"/>-->
		<element ref="maml:parameterReference" />
	        <element name="legacyBold" type="maml:textType"/>
		<element ref="maml:legacyLink"/>
		<element ref="maml:legacyUnderline"/>
	    </choice>
	    <attribute name="language" type="maml:devLanguagesType"/>
            <attribute ref="xml:space"/>
	</complexType>
	
	<element name="legacySyntax" type="maml:legacySyntaxType">
	    <annotation>
			<documentation>
		    This element holds syntax obtained from a converted document.
		    </documentation>
			<appinfo>
				<doc:localizable>false</doc:localizable>
				<doc:type>block</doc:type>
			</appinfo>
		</annotation>
	</element>
	
	<complexType name="syntaxSectionType" mixed="false">
	    <sequence>
	        <element ref="maml:sections" minOccurs="0" maxOccurs="1"/>
	        <element ref="maml:legacySyntax" minOccurs="1" maxOccurs="unbounded"/>
	    </sequence>
	</complexType>
	
	<element name="syntaxSection" type="maml:syntaxSectionType">
	    <annotation>
			<documentation>
		    This element holds syntax obtained from a converted document.
		    </documentation>
			<appinfo>
				<doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
		</annotation>
	</element>

	<complexType name="schemaHierarchyType" mixed="false">
		<sequence>
			<element ref="maml:link" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<element name="schemaHierarchy" type="maml:schemaHierarchyType">
		<annotation>
			<documentation>
		    This element holds syntax obtained from a converted document.
		    </documentation>
			<appinfo>
				<doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
		</annotation>
	</element>
	<complexType name="attributesType" mixed="true">
		<choice>
			<element ref="maml:para"/>
			<element ref="maml:table"/>
		</choice>
	</complexType>
	<complexType name="attributeType" mixed="true">
		<sequence>
			<element name="title" type="maml:textType"/>
			<element ref="maml:table"/>
		</sequence>
	</complexType>
	<element name="attribute" type="maml:attributeType">
		<annotation>
			<documentation>
		    This element holds syntax obtained from a converted document.
		    </documentation>
			<appinfo>
				<doc:localizable>false</doc:localizable>
				<doc:type>block</doc:type>
			</appinfo>
		</annotation>
	</element>
	<complexType name="attributesandElementsType" mixed="true">
		<sequence>
			<element ref="maml:para"/>
			<element name="attributes" type="maml:attributesType"/>
			<element ref="maml:attribute" minOccurs="0" maxOccurs="unbounded"/>
			<element name="childElement" type="maml:attributesType"/>
			<element name="parentElement" type="maml:attributesType"/>
		</sequence>
	</complexType>
	<element name="attributesandElements" type="maml:attributesandElementsType">
		<annotation>
			<documentation>
		    This element holds syntax obtained from a converted document.
		    </documentation>
			<appinfo>
				<doc:localizable>false</doc:localizable>
				<doc:type>block</doc:type>
			</appinfo>
		</annotation>
	</element>
	<complexType name="tableType" mixed="false">
		<sequence>
			<element ref="maml:table"/>
		</sequence>
	</complexType>
	<element name="elementInformation" type="maml:tableType">
		<annotation>
			<documentation>
		    This element holds syntax obtained from a converted document.
		    </documentation>
			<appinfo>
				<doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
		</annotation>
	</element>

</schema>